﻿
namespace SharpTag.ID3
{
    /// <summary>
    /// Interface representing a Tag
    /// </summary>
    public interface ITag : IPreparable, IModifiable
    {
        /// <summary>
        /// Gets the Name of the Tag.
        /// </summary>
        string Name
        {
            get;
        }

        /// <summary>
        /// Gets the Description of the Tag.
        /// </summary>
        string Description
        {
            get;
        }

        /// <summary>
        /// Gets the Offset of the Tag.
        /// </summary>
        long Offset
        {
            get;
        }

        /// <summary>
        /// Gets the Version of the Tag.
        /// </summary>
        double Version
        {
            get;
        }

        /// <summary>
        /// Gets the Album found in the Tag.
        /// </summary>
        string Album
        {
            get;
        }

        /// <summary>
        /// Gets the AlbumTrack found in the Tag.
        /// </summary>
        int AlbumTrack
        {
            get;
        }

        /// <summary>
        /// Gets the Artist found in the Tag.
        /// </summary>
        string Artist
        {
            get;
        }

        /// <summary>
        /// Gets the Comment found in the Tag.
        /// </summary>
        string Comment
        {
            get;
        }

        /// <summary>
        /// Gets the Title found in the Tag.
        /// </summary>
        string Title
        {
            get;
        }

        /// <summary>
        /// Gets the Year found in the Tag.
        /// </summary>
        int Year
        {
            get;
        }

        /// <summary>
        /// Gets the Genre found in the Tag.
        /// </summary>
        string Genre
        {
            get;
        }

        /// <summary>
        /// Sets the Album name of the Tag.
        /// </summary>
        /// <param name="albumName">The Album name.</param>
        void SetAlbum(string albumName);

        /// <summary>
        /// Sets the Album Track of the Tag.
        /// </summary>
        /// <param name="trackNumber">The Track number.</param>
        void SetAlbumTrack(int trackNumber);

        /// <summary>
        /// Sets the Artist name of the Tag.
        /// </summary>
        /// <param name="artistName">The Artist name.</param>
        void SetArtist(string artistName);

        /// <summary>
        /// Sets the Comment of the Tag.
        /// </summary>
        /// <param name="comment">The Comment string.</param>
        void SetComment(string comment);

        /// <summary>
        /// Sets the Title of the Tag.
        /// </summary>
        /// <param name="title">The Title string.</param>
        void SetTitle(string title);

        /// <summary>
        /// Sets the Year of the Tag.
        /// </summary>
        /// <param name="year">The Year integer.</param>
        void SetYear(int year);

        /// <summary>
        /// Sets the Genre of the Tag.
        /// </summary>
        /// <param name="genre">The Genre string.</param>
        void SetGenre(string genre);

        /// <summary>
        /// Parses the raw tag data into the appropriate properties.
        /// </summary>
        /// <param name="tagBytes">A byte array containing the raw tag data.</param>
        void ParseTagData(byte[] tagBytes);
    }
}
